package com.bennyhuo.list4_39_49

import com.squareup.javapoet.JavaFile
import com.squareup.javapoet.MethodSpec
import com.squareup.javapoet.ParameterSpec
import com.squareup.javapoet.TypeName
import com.squareup.javapoet.TypeSpec
import java.io.File
import javax.lang.model.element.Modifier

fun main() {
  // 4-39,40,41
  // main 方法的定义
  val mainMethod: MethodSpec = MethodSpec.methodBuilder("main")
    // 添加 public static 关键字
    .addModifiers(Modifier.STATIC, Modifier.PUBLIC)
    // 添加参数
    .addParameter(
      // 参数的定义
      ParameterSpec.builder(
        // 参数的类型为 String[]，Kotlin 当中对应为 Array<String>
        Array<String>::class.java, "args"
      ).build()
    )
    // 返回 void
    .returns(TypeName.VOID)
    // 方法体，$T 是 JavaPoet 当中的类型格式化符，对应于后面的 System::class.java
    .addStatement("\$T.out.println(\"Hello, World\")", System::class.java)
    .build()

  // HelloWorld 类的定义
  val helloWorldType: TypeSpec = TypeSpec.classBuilder("HelloWorld")
    // 添加 public 关键字
    .addModifiers(Modifier.PUBLIC)
    // 添加 main 方法
    .addMethod(mainMethod).build()

  JavaFile.builder("com.bennyhuo.java.helloworld", helloWorldType)
    // 为生成的文件添加注释
    .addFileComment("This is generated by JavaPoet.")
    // 处理自动导包时，忽略 java.lang 包下类的导入
    .skipJavaLangImports(true)
    .build()
    // 写入到 data 目录下
    .writeTo(File("data"))
}